The dataset that is used for this assignment is the FIREBALLS:Bolide impacts by the Kiloton since 1988 dataset which is collected by NASA. Can find the full dataset on the Kaggle here: [https://www.kaggle.com/nasa/fireballs]. The dataset is a collection of reported fireball events which were observed at their peak brightness. Such events generally could be observed at midnight and much more rarely at daylight. Fireballs or Bolides’ are also known as Shooting Stars.
This phenomenon has 2 aspects that before it enters the earth surface with some mass is called Meteroids. However, once it enters the earth’s atmosphere is known as Bolide with energy.
library(VIM)
## Warning: package 'VIM' was built under R version 3.6.3
library(tidyr)
## Warning: package 'tidyr' was built under R version 3.6.3
library(stringr)
## Warning: package 'stringr' was built under R version 3.6.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
library(plotly)
## Warning: package 'plotly' was built under R version 3.6.3
library(reshape2)
library(dplyr)
library(maps)
## Warning: package 'maps' was built under R version 3.6.3
cneos_fireball_data <- read.csv("F:/MS_SEM2/Data Visualisation/cneos_fireball_data.csv")
fireball_data <- cneos_fireball_data
str(fireball_data)
## 'data.frame': 719 obs. of 10 variables:
## $ Peak.Brightness.Date.Time..UT. : Factor w/ 719 levels "1988-04-15 03:03:10",..: 719 718 717 716 715 714 713 712 711 710 ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
This dataset consists 10 variables and 719 rows. It consists the information of observed Bolide’s Latitude, Longitude, Data, Time, Month, year, Altitude, Velocity, Total radiated and impacted energy information.
Below is the description of the features of Fireball Data :-
Below is the code :-
fireball_data1 <- fireball_data %>% separate(Peak.Brightness.Date.Time..UT., c("Year", "Month","Date and Time"), "-") %>%
separate("Date and Time", c("Date", "Time")," ")
str(fireball_data1)
## 'data.frame': 719 obs. of 13 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "07" "06" ...
## $ Date : chr "31" "23" "13" "30" ...
## $ Time : chr "22:01:35" "06:12:38" "09:30:36" "14:26:45" ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
Below is the code which outputs the number of missing values :-
sum(is.na(fireball_data1))
## [1] 2660
Total 2660 missing values are present in the data which is a huge number. So, lets visualise the Missing Data using ‘aggr’ (aggregate) function.
Code to Visualise the Missing Values:-
aggr(fireball_data1, numbers = TRUE,prop = FALSE, cex.lab = 1.2)
NOTE Here we observes that if ‘velocity’ feature’s information is missing than only ‘vx’, ‘vy’, ‘vz’ feature’s data is missing. Also, for ‘Velocity’ feature the huge amount of data missing i.e. of 152+410 from which 152 data is missing for combination of velocity, vx, vy, vz while 410 data is missing for combination of velocity, vx,vy,vz and altitude.
Below is the code which adds new feature Total Radiated Energy in Kilotons :-
fireball_data1$Total.Radiated.Energy..Kt. <- round(fireball_data1$Total.Radiated.Energy..J./(4.185*10^12),3)
str(fireball_data1)
## 'data.frame': 719 obs. of 14 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "07" "06" ...
## $ Date : chr "31" "23" "13" "30" ...
## $ Time : chr "22:01:35" "06:12:38" "09:30:36" "14:26:45" ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
## $ Total.Radiated.Energy..Kt. : num 0.014 0.008 0.017 0.022 0.044 0.152 0.022 0.008 0.008 0.036 ...
Latitude Ranges and Directions The given Latitude degree is Geodetic latitude in degrees north (N) or south (S) of the equator for this event. The degrees towards North pole are taken as positive sign and degrees towards South pole are taken as Negative sign. The Latitude Degrees are assigned as in the the range of their respective 30 degree range brackets.
Longitude Ranges and Directions The given Longitude degree is Geodetic longitude in degrees east (E) or west (W) of the prime meridian for this event. The degrees in East of 0° are taken as positive sign and degrees in West of 0° are taken as negative sign. The Longitude Degrees are assigned as in the the range of their respective 30 degree range brackets similarly like Latitue Range.
Below is the code :-
fireball_data1$Lat.NS <- as.factor(ifelse(str_sub(fireball_data1$Latitude..deg.., -1) == "N", "North", ifelse(str_sub(fireball_data1$Latitude..deg.., -1) == "S","South","")))
fireball_data1$Latitude.Degree <- as.numeric(str_extract(fireball_data1$Latitude..deg.., "\\d+\\.*\\d*"))
fireball_data1$Latitude.Degree <- ifelse(fireball_data1$Lat.NS == "South", -abs(fireball_data1$Latitude.Degree), fireball_data1$Latitude.Degree)
fireball_data1$Latitude.Grid <- cut(fireball_data1$Latitude.Degree, seq(-90, 90, 30))
fireball_data1$Lng.EW <-as.factor(ifelse(str_sub(fireball_data1$Longitude..deg.., -1) == "W", "West", ifelse(str_sub(fireball_data1$Longitude..deg.., -1) == "E","East","")))
fireball_data1$Longitude.Degree <-as.numeric(str_extract(fireball_data1$Longitude..deg.., "\\d+\\.*\\d*"))
fireball_data1$Longitude.Degree <- ifelse(fireball_data1$Lng.EW == "West", -abs(fireball_data1$Longitude.Degree), fireball_data1$Longitude.Degree)
fireball_data1$Longitude.Grid <- cut(fireball_data1$Longitude.Degree, seq(-180, 180, 30))
fireball_data1$Direction.NSEW <- as.factor(paste(fireball_data1$Lat.NS, fireball_data1$Lng.EW))
Now, lets check what’s now the data looks like. Below is the code which displays the structure of dataset
str(fireball_data1)
## 'data.frame': 719 obs. of 21 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "07" "06" ...
## $ Date : chr "31" "23" "13" "30" ...
## $ Time : chr "22:01:35" "06:12:38" "09:30:36" "14:26:45" ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
## $ Total.Radiated.Energy..Kt. : num 0.014 0.008 0.017 0.022 0.044 0.152 0.022 0.008 0.008 0.036 ...
## $ Lat.NS : Factor w/ 3 levels "","North","South": 2 3 2 3 2 3 3 3 3 3 ...
## $ Latitude.Degree : num 24.7 -6.6 23.1 -34.3 57 -54.2 -9.1 -49.6 -26 -25.7 ...
## $ Latitude.Grid : Factor w/ 6 levels "(-90,-60]","(-60,-30]",..: 4 3 4 2 5 2 3 2 3 3 ...
## $ Lng.EW : Factor w/ 3 levels "","East","West": 3 3 2 2 2 2 2 3 2 2 ...
## $ Longitude.Degree : num -118.5 -69.7 60.7 134.5 143.7 ...
## $ Longitude.Grid : Factor w/ 12 levels "(-180,-150]",..: 3 4 9 11 11 11 10 1 8 8 ...
## $ Direction.NSEW : Factor w/ 5 levels " ","North East",..: 3 5 2 4 2 4 4 5 4 4 ...
PLOT 1: To Visualise the Bolide’s Radiated Energy at peak brightness, into Latitude & Longitude grids
Below is the Frequency Table, Table 01 :
as.table(xtabs(~ Longitude.Grid + Latitude.Grid, fireball_data1))
## Latitude.Grid
## Longitude.Grid (-90,-60] (-60,-30] (-30,0] (0,30] (30,60] (60,90]
## (-180,-150] 4 9 15 12 12 3
## (-150,-120] 2 4 5 16 5 3
## (-120,-90] 5 7 6 12 10 0
## (-90,-60] 3 9 15 8 7 3
## (-60,-30] 1 3 9 10 6 3
## (-30,0] 3 11 16 11 2 2
## (0,30] 2 10 10 13 12 2
## (30,60] 1 15 13 10 7 1
## (60,90] 2 7 11 13 7 0
## (90,120] 3 6 14 13 19 3
## (120,150] 6 13 9 13 5 1
## (150,180] 2 12 13 9 7 3
fireball_data1 %>% filter(!is.na(Latitude.Grid)) %>% ggplot(aes(y = Latitude.Grid, x = Longitude.Grid))+
geom_jitter(aes(size = sqrt(Total.Radiated.Energy..Kt.)), color = "green", alpha = 0.20)+
geom_text(aes(label=ifelse(sqrt(Total.Radiated.Energy..Kt.)>8, "Highest Energy Radiated Region","")), vjust = "outward", size = 2.5)+
facet_grid( Lat.NS ~ Lng.EW, scales = "free", switch = "both")+
labs(title = "Bolides Radiated Energy at Lat. & Long.", x = "Longitude's Range", y = "Latitude's Range")+
theme(legend.position = "top")+
scale_size_continuous(name = "Sqrt[Total Radiated Energy (kt)]")
OBSERVATIONS
The Highest Energy radiated region is observed in North- East direction.
The 19 which is the maximum number of Bolides’ events observed at [30°x60°]x[90°x120°] latitude- longitude grid. The next second highest 16 Bolides’ events were observed at [0°x30°]x[-150°x-120°] latitude- longitude grid. For the given dataset, no Bolide event was recorded at [60°x90°]x[-120x-90] and [60°x90°]x[60°x90°] latitude-longitude grid.
PLOT 2: To Visualise Relationship between Diameter of bolide on Altitude(km) and Total Radiated Energy(kt)
GLASSTONE and DOLAN (1977) stated that to calculate the Energy Gradients which are ‘blast efficiency factor’ and ‘thermal radiation factor’, Altitude(km) act as a key factor.
When firballs or say Bolides enters the earth surface, it explodes due to friction from high density of earth’s atmosphere as they move near Earth’s surface. When it explodes it radiates thermal energy, the magnitude of this energy varies based on Altitude and climatic conditions.
Table 02 : Displays the Altitude(km) based Energy Gradients
Altitude.Energy.Gradient.Table <- matrix(c(1.0, 0.35, 1.0, 0.40, 0.9, 0.40, 0.9, 0.50, 0.7, 0.50, 0.4, 0.50), ncol = 2, byrow = TRUE)
colnames(Altitude.Energy.Gradient.Table) <- c("Blast Efficiency Factor","Thermal Radiation percent")
rownames(Altitude.Energy.Gradient.Table) <- c("Altitude(km) <= 12.192", "12.192 < Alt(km) <= 27.432", "27.432 < Alt(km) <= 30.480", "30.480 < Alt(km) <= 36.576", "36.576 < Alt(km) <= 45.720", "Altitude(km) > 45.720")
Altitude.Energy.Gradient.Table <- as.table(Altitude.Energy.Gradient.Table)
Altitude.Energy.Gradient.Table
## Blast Efficiency Factor
## Altitude(km) <= 12.192 1.00
## 12.192 < Alt(km) <= 27.432 1.00
## 27.432 < Alt(km) <= 30.480 0.90
## 30.480 < Alt(km) <= 36.576 0.90
## 36.576 < Alt(km) <= 45.720 0.70
## Altitude(km) > 45.720 0.40
## Thermal Radiation percent
## Altitude(km) <= 12.192 0.35
## 12.192 < Alt(km) <= 27.432 0.40
## 27.432 < Alt(km) <= 30.480 0.40
## 30.480 < Alt(km) <= 36.576 0.50
## 36.576 < Alt(km) <= 45.720 0.50
## Altitude(km) > 45.720 0.50
##TOTAL ENERGY OF BOLIDE AT PEAK BRIGHTNESS- We can calculate and add a new feature into our dataset by calculating the total energy of fireball before exploding. Total Energy at peak brightness is a function of Thermal Radiations, blast and shock energy.
Below is the code :-
fireball_data1 <-
mutate(fireball_data1 , Before_explodingTotEnergy.kt = round(
if_else(Altitude..km. <= 12.192, (Total.Radiated.Energy..Kt./(0.35*1)),
if_else(Altitude..km. > 12.192 & Altitude..km. <= 27.432, (Total.Radiated.Energy..Kt./(0.40*1)),
if_else(Altitude..km. > 27.432 & Altitude..km. <= 30.48, (Total.Radiated.Energy..Kt./(0.4*0.9)),
if_else(Altitude..km. > 30.48 & Altitude..km. <= 36.576, (Total.Radiated.Energy..Kt./(0.5*0.9)),
if_else(Altitude..km. > 36.576 & Altitude..km. <= 45.72, (Total.Radiated.Energy..Kt./(0.5*0.7)), (Total.Radiated.Energy..Kt./(0.5*0.4))))))), 2))
Checks and displays the structure of fireball_data1 dataset
str(fireball_data1)
## 'data.frame': 719 obs. of 22 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "07" "06" ...
## $ Date : chr "31" "23" "13" "30" ...
## $ Time : chr "22:01:35" "06:12:38" "09:30:36" "14:26:45" ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
## $ Total.Radiated.Energy..Kt. : num 0.014 0.008 0.017 0.022 0.044 0.152 0.022 0.008 0.008 0.036 ...
## $ Lat.NS : Factor w/ 3 levels "","North","South": 2 3 2 3 2 3 3 3 3 3 ...
## $ Latitude.Degree : num 24.7 -6.6 23.1 -34.3 57 -54.2 -9.1 -49.6 -26 -25.7 ...
## $ Latitude.Grid : Factor w/ 6 levels "(-90,-60]","(-60,-30]",..: 4 3 4 2 5 2 3 2 3 3 ...
## $ Lng.EW : Factor w/ 3 levels "","East","West": 3 3 2 2 2 2 2 3 2 2 ...
## $ Longitude.Degree : num -118.5 -69.7 60.7 134.5 143.7 ...
## $ Longitude.Grid : Factor w/ 12 levels "(-180,-150]",..: 3 4 9 11 11 11 10 1 8 8 ...
## $ Direction.NSEW : Factor w/ 5 levels " ","North East",..: 3 5 2 4 2 4 4 5 4 4 ...
## $ Before_explodingTotEnergy.kt : num NA 0.02 0.04 0.05 0.1 0.34 0.11 0.02 0.02 0.08 ...
##Calculating Radius(m) and Diameter(m) of Bolide at the time of explosion:- At the time of bolide’s Air Burst, thermal radiations are released in an umbrella form. Using Table 02 data, we can calculate Radius(m) and Diameter(m) of umbrella of Thermal Radiations.
\[\text{Radius(m)} = \text{Total Radiated energy(kt)}/ \text{(Blast Efficiency Factor*Thermal Radiation percent)}\]
Below is the code : Adds and calculates the Radius(m) feature using Table02 information
fireball_data1 <-
mutate(fireball_data1, Radius.m = round(
if_else(Altitude..km. <= 12.192 , (110*0.3048)*((Total.Radiated.Energy..Kt./(0.35*1))^(0.4)),
if_else(Altitude..km. > 12.192 & Altitude..km. <= 27.432, (110*0.3048)*((Total.Radiated.Energy..Kt./(0.40*1))^(0.4)),
if_else(Altitude..km. > 27.432 & Altitude..km. <= 30.48, (110*0.3048)*((Total.Radiated.Energy..Kt./(0.4*0.9))^(0.4)),
if_else(Altitude..km. > 30.48 & Altitude..km. <= 36.576, (110*0.3048)*((Total.Radiated.Energy..Kt./(0.5*0.9))^(0.4)),
if_else(Altitude..km. > 36.576 & Altitude..km. <= 45.72,(110*0.3048)*((Total.Radiated.Energy..Kt./(0.5*0.7))^(0.4)), (110*0.3048)*((Total.Radiated.Energy..Kt./(0.5*0.4))^(0.4))))))), 2))
For Diameter(m), Gareth S. COLLINS et al. stated: “…Numerical simulations of vapour plume expansion (Melosh et al. 1993; Nemtchinov et al. 1998) predict that the fireball radius at the time of maximum radiation is 10—15 times the Meteoroid’s diameter”.
Calculation for Upper Limit and Lower Limit of Diameter:
\[\text{Diameter} = [\text{radius/x1}, \text{radius/x2}] \text{ such that x1} = 10 \text{ and x2 }=15\]
Below is the code : Adds and calculates the Diameter upper and lower limit feature
fireball_data1 <- mutate(fireball_data1, diameter.HiLimit = round(Radius.m/10,2))
fireball_data1 <- mutate(fireball_data1, diameter.LoLimit = round(Radius.m/15,2))
#Displays the structure of fireball_data1 dataset
str(fireball_data1)
## 'data.frame': 719 obs. of 25 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "07" "06" ...
## $ Date : chr "31" "23" "13" "30" ...
## $ Time : chr "22:01:35" "06:12:38" "09:30:36" "14:26:45" ...
## $ Latitude..deg.. : Factor w/ 434 levels "","0.0N","0.2N",..: 124 358 116 199 342 333 432 301 130 128 ...
## $ Longitude..deg.. : Factor w/ 500 levels "","0.1E","0.2E",..: 71 415 394 114 145 109 11 181 316 380 ...
## $ Altitude..km. : num NA 38 35 20 35.1 33.3 46 33 33 32.4 ...
## $ Velocity..km.s. : num NA 17.2 13.7 15.2 24.3 13.6 18.4 NA NA 21.5 ...
## $ vx : num NA -0.4 -10 10.9 17.7 8.7 -6.5 NA NA -13.4 ...
## $ vy : num NA 8.7 -6.5 -9.7 13.1 -5.7 -16.5 NA NA -14.2 ...
## $ vz : num NA -14.8 -6.8 4.2 -10.3 8.8 -5 NA NA 8.9 ...
## $ Total.Radiated.Energy..J. : num 5.80e+10 3.50e+10 7.30e+10 9.40e+10 1.84e+11 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.19 0.12 0.23 0.29 0.52 1.6 0.28 0.12 0.12 0.43 ...
## $ Total.Radiated.Energy..Kt. : num 0.014 0.008 0.017 0.022 0.044 0.152 0.022 0.008 0.008 0.036 ...
## $ Lat.NS : Factor w/ 3 levels "","North","South": 2 3 2 3 2 3 3 3 3 3 ...
## $ Latitude.Degree : num 24.7 -6.6 23.1 -34.3 57 -54.2 -9.1 -49.6 -26 -25.7 ...
## $ Latitude.Grid : Factor w/ 6 levels "(-90,-60]","(-60,-30]",..: 4 3 4 2 5 2 3 2 3 3 ...
## $ Lng.EW : Factor w/ 3 levels "","East","West": 3 3 2 2 2 2 2 3 2 2 ...
## $ Longitude.Degree : num -118.5 -69.7 60.7 134.5 143.7 ...
## $ Longitude.Grid : Factor w/ 12 levels "(-180,-150]",..: 3 4 9 11 11 11 10 1 8 8 ...
## $ Direction.NSEW : Factor w/ 5 levels " ","North East",..: 3 5 2 4 2 4 4 5 4 4 ...
## $ Before_explodingTotEnergy.kt : num NA 0.02 0.04 0.05 0.1 0.34 0.11 0.02 0.02 0.08 ...
## $ Radius.m : num NA 7.4 9.04 10.51 13.23 ...
## $ diameter.HiLimit : num NA 0.74 0.9 1.05 1.32 2.17 1.39 0.67 0.67 1.22 ...
## $ diameter.LoLimit : num NA 0.49 0.6 0.7 0.88 1.45 0.92 0.45 0.45 0.81 ...
#Visualising the Relationship between Diameter of bolide before exploding on Altitude(km) and Total Radiated Energy(kt)
fireball_data1 %>% filter(!is.na(Altitude..km.))%>% ggplot(aes(x = Altitude..km., y = Total.Radiated.Energy..Kt.))+
geom_jitter(aes(size = (diameter.LoLimit+diameter.HiLimit)/2),color = "blue",alpha = 0.20)+
geom_smooth(model = lm, color = "yellow")+
geom_text(aes(label=ifelse(Total.Radiated.Energy..Kt.>80, "Most Energy Radiated Region","")), vjust = "inward", size = 3.5)+
labs(title = "Relation between Total Radiated Energy(kt) & Altitude(km)", x = "Altitude(km)", y = "Log of Total Radiated Energy(kt)")+
theme_light()+theme(legend.position = "top")+
scale_size_continuous(name = "Bolide's Average Diameter (m)")+
scale_y_log10()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
OBSERVATIONS
‘Altitude’ and ‘Total Radiation Energy’ are negatively corelated.
With the increase of Altitude, the magnitude of radiation energy is decreased.
The most of the Bolides’ events are observed for 20km to 40km Altitude. Also, the highest radiated energy Bolide is also observed for this range at around 25km Altitude.
PLOT 3: To Visualise the Relationship between Total Radiated Energy with Altitude(km) Direction Wise
fireball_data1 %>% filter(!is.na(Altitude..km.)) %>% ggplot(aes(x = Altitude..km., y = Total.Radiated.Energy..Kt.))+
geom_jitter(color = "navyblue",alpha = 0.72)+
geom_smooth(model = lm,color = "red")+
facet_wrap(~ Direction.NSEW, scales = "free")+
labs(title = "Relation between Radiated Energy with Altitude Direction Wise", x = "Altitude(km) at Peak Brightness", y = "Total Radiated Energy")+
scale_y_log10()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
OBSERVATIONS
The most of the Bolides’ events are observed for 20km to 40km Altitude Range for all Directions.
In South-East Direction, maximum number of Bolide events seems to be occured comparitively.
The same pattern of Radiating energy with Altitude is been observed for North-East and South-West Direction.
For North-East Direction comparing with other directions Bolides’ Radiation energy is very less.
Bolide events happened in North-West Direction are observed to radiate the comparitively with larger amount of energy.
PLOT 4: To Visualise the Relationship between Impacted Energy with Altitude(km) Direction Wise
Impacted Energy is the amount of energy left in the meteroid after explosion.
fireball_data1 %>% filter(!is.na(Altitude..km.)) %>% ggplot(aes(x = Altitude..km., y = Calculated.Total.Impact.Energy..kt.))+
geom_jitter(color = "orange",alpha = 0.72)+
geom_smooth(model = lm)+
facet_wrap(~ Direction.NSEW, scales = "free")+
labs(title = "Relation between Radiated Energy with Altitude Direction Wise", x = "Altitude(km) at Peak Brightness", y = "Total Radiated Energy")+
scale_y_log10()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
OBSERVATIONS
The most of the Bolides’ events are observed for 20km to 40km Altitude Range for all Directions except in South-West Direction. For South-West Direction, events are observed at 30-50km altitude range.
The similar pattern of Impact energy with Altitude is been observed for North-East and South-West Direction.
For Altitude(km) greater than 40km, the impact energy is observed to be decreasing.
Altitude and Impact Energy of bolide is negatively corelated.
PLOT 5: To Visualise the relation of Bolides’ Radius, Altitude & Velocity
It displays Bolides’ Air Bursts’ radius (m) at various Altitudes (km) above geoid vs pre-impact Velocities (km/s) at peak brightness.
fireball_data1 %>% filter(!is.na(Altitude..km.) & !is.na(Velocity..km.s.))%>% ggplot(aes(y= Velocity..km.s., x= Altitude..km.))+
geom_point(aes(size = log(Radius.m)), color = "violet", alpha = 0.50)+
geom_smooth(model = lm,color = "red")+
facet_grid(~ Direction.NSEW)+
labs(title ="Bolides' radius at various Altitudes & Velocity", x = "Velocity (km/s) at Airburst", y = "Altitude (km) at Airburst")+theme(legend.position = "top")+scale_size_continuous(name = "Log of Bolide's Airburst's radius (m)")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
OBSERVATIONS
Observes the similar trend for South-East and South-West Direction.
Bolide with highest velocity of 60km/hr is observed in North-East Direction at very low Altitude of 11km with average size in terms of Radius.
For North Direction, the observed bolide events seems to have increase in velocity with increase in Altitude.
South Direction has variations of velocity with Altitude.
PLOT 6: To Visualise the number of Bolides’ observed based on Impacted Energy with respective directions
#Frequency Of Bolides’ with Missing Data
fireball_data1 %>% filter(is.na(Altitude..km.)) %>% ggplot(aes(x = Calculated.Total.Impact.Energy..kt. , colour = Direction.NSEW))+
geom_histogram(bins = 100)+
facet_wrap(~ Direction.NSEW, scales = "free")+
scale_x_log10()+
labs(title = "Frequency of Bolides with missing data", y = "Frequency", x = "x - axis on Log10 scale")
OBSERVATIONS
6 times Fireballs events were observed having same impacted energy in North-East and Nort- West Direction.
In South-East direction, bolides’ with same impacted energy were observed by 5 times.
In South-West direction, with three different impacted energies bolides’ observed by 4 times.
The most of the bolides events are observed in West Direction.
##Visualising for Non Missing Data
Removes the missing data from the datset and stores on ‘nonMissingData’
nonMissingData <- na.omit(fireball_data1)
#filtes the only required columns
nonMissingData <- nonMissingData %>% select("Year","Month","Date",7,8,9,10,11,13,14,16,17,19,20,21)
#displays the structure of 'nonMissingData' dataset
str(nonMissingData)
## 'data.frame': 155 obs. of 15 variables:
## $ Year : chr "2017" "2017" "2017" "2017" ...
## $ Month : chr "07" "07" "06" "06" ...
## $ Date : chr "23" "13" "30" "23" ...
## $ Altitude..km. : num 38 35 20 35.1 33.3 46 32.4 23 25.4 38 ...
## $ Velocity..km.s. : num 17.2 13.7 15.2 24.3 13.6 18.4 21.5 36.5 12.2 24.2 ...
## $ vx : num -0.4 -10 10.9 17.7 8.7 -6.5 -13.4 -15.3 -7.6 -6.6 ...
## $ vy : num 8.7 -6.5 -9.7 13.1 -5.7 -16.5 -14.2 25.8 -9.3 -22.7 ...
## $ vz : num -14.8 -6.8 4.2 -10.3 8.8 -5 8.9 -20.8 2.2 -5.3 ...
## $ Calculated.Total.Impact.Energy..kt.: num 0.12 0.23 0.29 0.52 1.6 0.28 0.43 1 0.21 0.79 ...
## $ Total.Radiated.Energy..Kt. : num 0.008 0.017 0.022 0.044 0.152 0.022 0.036 0.096 0.016 0.07 ...
## $ Latitude.Degree : num -6.6 23.1 -34.3 57 -54.2 -9.1 -25.7 40.5 29.5 6.2 ...
## $ Latitude.Grid : Factor w/ 6 levels "(-90,-60]","(-60,-30]",..: 3 4 2 5 2 3 3 5 4 4 ...
## $ Longitude.Degree : num -69.7 60.7 134.5 143.7 133 ...
## $ Longitude.Grid : Factor w/ 12 levels "(-180,-150]",..: 4 9 11 11 11 10 8 6 7 9 ...
## $ Direction.NSEW : Factor w/ 5 levels " ","North East",..: 5 2 4 2 4 4 4 3 2 2 ...
## - attr(*, "na.action")= 'omit' Named int 1 8 9 11 13 15 17 18 20 21 ...
## ..- attr(*, "names")= chr "1" "8" "9" "11" ...
PLOT 7: Univariate Analysis on ‘Year’
Converts the ‘Year’ feature as numeric datatype
nonMissingData$Year <- as.numeric(nonMissingData$Year)
Plots the histogram of Year
h <- hist(nonMissingData$Year, plot = FALSE)
plot(h, xaxt = "n", xlab = "Year", ylab = "Counts",
main = "No Of Bolides Observed per Year ", col = "blue", border = "yellow")
axis(1, h$mids, labels = levels(nonMissingData$Year), tick = FALSE , padj= -1.5)
OBSERVATIONS
Most of the events were observed in 2014-15.
The plot is Left skewed.
Fireball events were observed rarely for year 1999 to 2002.
Least events were observed in 1999 year.
PLOT 8: Univariate Analysis on ‘Month’
Converts the ‘Month’ feature as numeric datatype
nonMissingData$Month <- as.numeric(nonMissingData$Month)
#plots the Histogram of Month
hist(nonMissingData$Month, col='pink',ylab = 'No of Bolides', xlab='Months',main = 'No of Bolides observed per month', labels=levels(nonMissingData$Month), xaxt='n')
axis(1, at=unique(nonMissingData$Month), labels=levels(nonMissingData$Month))
OBSERVATION
Most of the cases are observed in starting months i.e of January- February.
The spread of the data is flat symmetric excluding the data of January.
The minimum number of events were observed for July - August months.
PLOT 9: Univariate Analysis on ‘Months for year 2015’
As observed in earlier plots, that most of the Bolides’ events occured for year 2015 and in starting months.
Lets observe does if it is the case for year 2015 or not.
STEP 1 - Filters outs the data for 2015 year
STEP 2 - Converts the ‘Month’ feature as numeric datatype
year2015 <- nonMissingData %>% filter(Year == 2015)
nonMissingData$Month <- as.numeric(nonMissingData$Month)
#plots the Histogram of Months of 2015 Year
hist(year2015$Month,breaks = 12, col='yellow',border = 'blue', ylab = 'No of Bolides', xlab='Months',main = 'No of Bolides observed per month for 2015 year', labels=levels(year2015$Month), xaxt='n')
axis(1, at=unique(year2015$Month),xlim = c(1,12), labels=levels(year2015$Month))
OBSERVATION
Yes, likewise observation for above histogram plots, the starting months of the year 2015, were the most number of fireballs events observed.
PLOT 10: Frequency Of Bolides’ with Non - Missing Data
To visualise for non missing data, the number of Bolides’ observed based on Impacted Energy with respective directions
nonMissingData %>% ggplot(aes(x = Calculated.Total.Impact.Energy..kt. , colour = Direction.NSEW))+
geom_histogram(bins = 100)+
facet_wrap(~ Direction.NSEW, scales = "free")+
scale_x_log10()+
labs(title = "Frequency of Bolides for non - missing data", y = "Frequency", x = "x - axis on Log10 scale")
OBSERVATIONS For, North West Direction,only 2 times Fireballs events were observed having same impacted energy else others occured with different impacted energy.
The most of the bolides events with same impacted energy are observed in North East and South East Direction.
For North East Direction, few of the bolides’ events were observed with very high impacted energy.
PLOT 11: To visualise the Bolides’ observed Altitude w.r.t Latitude and Longitude Grid
#Bolide’s observed Altitude Raster Map
p <- ggplot(nonMissingData, aes(Latitude.Grid , Longitude.Grid )) +
geom_raster(aes(fill=Altitude..km.)) +
scale_fill_distiller(palette = "Spectral", direction = -1) +
labs(x="Latitude",
y="Longitude",
title = "Bolide's observed Altitude Raster Map ",
fill = "Altitude") +
theme(text = element_text(family = 'Fira Sans'),
plot.title = element_text(hjust = 0.5))
ggplotly(p)
OBSERVATIONS
There were very few events observed at high Altitude i.e. for above 50km.
The most of the events are observed for 20-50km Altitude.
For Latitude [-90°x-60°] region, the fireball events were observed at Altitude of 30km to 45km ramge.
PLOT 12: To visualise the Fireball’s events on world map yearly
#Visualising Fireballs on the world map yearly displaying Latitude,Longitude and Radiated Energy
p <- ggplot()+
theme_minimal()+
geom_polygon(data = map_data("world"), aes(x=long, y = lat, group = group), fill="navyblue", color = "navyblue",alpha=0.15) +
geom_point(data=fireball_data1 , aes(x=Longitude.Degree, y=Latitude.Degree, frame = Year, size = 5*Total.Radiated.Energy..Kt.), shape = 21, col = "coral", alpha = 0.72, fill = alpha("cornsilk", 0.1)) +
geom_point(data=fireball_data1 , aes(x=Longitude.Degree, y=Latitude.Degree, frame = Year, size = 2*Total.Radiated.Energy..Kt.), shape = 21, col = "firebrick", alpha = 0.81, fill = alpha("yellow", 0.15)) +
scale_y_continuous(breaks = c(-90, -60, -30, 0, 30, 60, 90)) +
scale_x_continuous(breaks = c(-180, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, 150, 180))+
labs(x = "Longitude", y = "Latitude", title = "Fireballs observed at peak Brightness")
ggplotly(p) %>% animation_opts(frame = 2000, transition = 100, redraw = TRUE) %>%
animation_slider(currentvalue = list(prefix = "Year: ", font = list(color="navyblue")))
The work could be improved by merging the Countries data by Latitude Longitude Range. The Dataset of Countries by Longitude Latitude is easily available on open source. I Failed to do so. The key issue I faced while executing is to merge both datasets as the Latitude Longitude Range of Fireball Data does not exacly matches with the countries specified Latitude Longitude.
Also, tried another approach by making Latitude Longitude grid for both Datasets and then merged them. This time it merged but this approach was not successfull as it lead to many duplicate rows. By mering countries data, could help to get more insights of this data and would have enhanced this work.
[1] “ggplot2 Graphing Library.” https://plotly.com/ggplot2/ (accessed Mar. 26, 2020).
[2] “THE EFFECTS OF NUCLEAR WEAPONS,” p. 660.
[3] GLASSTONE S., DOLAN P. J. 1977 The Effects of Nuclear Weapons 3rd Edition Washington DC by United States Department of Defence and the Energy Research and Development Administration.